使用动画节点
在游戏开发中,动画是使角色和场景生动起来的重要元素。Dora SSR 引擎提供了一个强大的动画处理节点类——Playable。它是三种动画系统的基础类:
- Model:
- Dora SSR 引擎实现的骨骼动画系统。
- 动画模型通常由一个
.model
文件,一个.clip
文件和一个.png
文件组成。
- DragonBone:
- 开源的 DragonBones 动画系统。
- 动画模型通常由一个以
_ske.json
结尾的文件,一个以_tex.json
结尾的文件和一个以_tex.png
结尾的图片文件组成。
- Spine:
- 著名的商业动画软件 Spine2D 的动画系统。
- 动画模型通常由一个
.json
(或是.skel
) 文件,一个.atlas
文件和一个.png
文件组成。
本教程将指导您如何在程序中使用各类动画节点,涵盖从加载动画到控制播放的各个方面。
1. 创建动画节点实例
1.1 创建 Model 动画节点
- Lua
- Teal
- TypeScript
- YueScript
local Model <const> = require("Model")
local character = Model("assets/character")
local Model <const> = require("Model")
local character = Model("assets/character")
import { Model } from "Dora";
const character = Model("assets/character");
_ENV = Dora
character = Model "assets/character"
1.2 创建 DragonBone 动画节点
- Lua
- Teal
- TypeScript
- YueScript
local DragonBone <const> = require("DragonBone")
local dragon = DragonBone("assets/dragon")
local DragonBone <const> = require("DragonBone")
local dragon = DragonBone("assets/dragon")
import { DragonBone } from "Dora";
const dragon = DragonBone("assets/dragon");
_ENV = Dora
dragon = DragonBone "assets/dragon"
1.3 创建 Spine 动画节点
- Lua
- Teal
- TypeScript
- YueScript
local Spine <const> = require("Spine")
local monster = Spine("assets/monster")
local Spine <const> = require("Spine")
local monster = Spine("assets/monster")
import { Spine } from "Dora";
const monster = Spine("assets/monster");
_ENV = Dora
monster = Spine "assets/monster"
2. 创建 Playable 实例
Playable 是一种方便地提供统一动画接口的节点,要使用 Playable 节点来播放动画,首先需要创建其实例。Playable 同时支持三种动画系统的加载和创建,通常使用的加载方式如下:
- Model 文件:
"model:"
前缀 + 不带后缀的模型文件路径。 - Spine 文件:
"spine:"
前缀 + 不带后缀的 Spine 文件路径。 - DragonBones 文件:
"bone:"
前缀 + 不带后缀的 DragonBones 文件路径。
2.1 示例:加载 Model 动画
- Lua
- Teal
- TypeScript
- YueScript
local Playable <const> = require("Playable")
-- 加载 Model 动画
local modelPath = "model:assets/character"
local character = Playable(modelPath)
if character then
character.position = Vec2(100, 200)
else
print("加载 Model 动画失败!")
end
local Playable <const> = require("Playable")
-- 加载 Model 动画
local modelPath = "model:assets/character"
local character = Playable(modelPath)
if not character is nil then
character.position = Vec2(100, 200)
else
print("加载 Model 动画失败!")
end
import { Playable, Vec2 } from "Dora";
// 加载 Model 动画
const modelPath = "model:assets/character";
const character = Playable(modelPath);
if (character) {
character.position = Vec2(100, 200);
} else {
print("加载 Model 动画失败!");
}
_ENV = Dora
// 加载 Model 动画
modelPath = "model:assets/character"
character = Playable modelPath
if character
character.position = Vec2 100, 200
else
print "加载 Model 动画失败!"
2.2 示例:加载 Spine 动画
- Lua
- Teal
- TypeScript
- YueScript
local Playable <const> = require("Playable")
-- 加载 Spine 动画
local spinePath = "spine:assets/monster"
local monster = Playable(spinePath)
if monster then
monster.position = Vec2(300, 200)
else
print("加载 Spine 动画失败!")
end
local Playable <const> = require("Playable")
-- 加载 Spine 动画
local spinePath = "spine:assets/monster"
local monster = Playable(spinePath)
if not monster is nil then
monster.position = Vec2(300, 200)
else
print("加载 Spine 动画失败!")
end